﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using BL;
using System.Data;

namespace SFsoftSite.Memberships
{
    public class SFUserManager : MembershipProvider
    {
        #region Atributos

        BLCliente _cliente;

        #endregion

        #region Métodos

        public MembershipUser CreateUser(string nome, string email, string senha, out MembershipCreateStatus retorno)
        {
            _cliente = new BLCliente();

            try
            {
                _cliente.InsertCliente(nome, email, senha);

                retorno = MembershipCreateStatus.Success;

                return System.Web.Security.Membership.GetUser(email);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public override bool DeleteUser(string username, bool deleteAllRelatedData)
        {
            throw new NotImplementedException();
        }

        public override MembershipUser GetUser(string username, bool userIsOnline)
        {
            _cliente = new BLCliente();

            DataTable dt = _cliente.GetClienteByEmail(username);

            if (dt == null || dt.Rows.Count == 0) return null;

            SFUserInfo usuario = new SFUserInfo();
            usuario.ID = Convert.ToInt32(dt.Rows[0]["ID"].ToString());
            usuario.Nome = dt.Rows[0]["Nome"].ToString();
            usuario.Foto = dt.Rows[0]["Foto"].ToString();
            usuario.Senha = dt.Rows[0]["Senha"].ToString();
            usuario.Email = dt.Rows[0]["Email"].ToString();
            usuario.Endereco = dt.Rows[0]["Endereco"].ToString();
            usuario.Telefone = dt.Rows[0]["Telefone"].ToString();
            usuario.Admin = Convert.ToBoolean(dt.Rows[0]["Admin"]);

            return usuario;
        }

        public override void UpdateUser(MembershipUser user)
        {
            _cliente = new BLCliente();

            _cliente.UpdateCliente(Convert.ToInt32(((SFUserInfo)user).ProviderUserKey),
                                   ((SFUserInfo)user).Nome,
                                   ((SFUserInfo)user).Senha,
                                   ((SFUserInfo)user).Endereco,
                                   ((SFUserInfo)user).Telefone,
                                   ((SFUserInfo)user).Foto);
        }

        public override bool ValidateUser(string username, string password)
        {
            _cliente = new BLCliente();

            return _cliente.ValidaLogin(username, password);
        }

        #endregion

        public override string ApplicationName
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public override bool ChangePassword(string username, string oldPassword, string newPassword)
        {
            throw new NotImplementedException();
        }

        public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
        {
            throw new NotImplementedException();
        }

        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            throw new NotImplementedException();
        }

        public override bool EnablePasswordReset
        {
            get { throw new NotImplementedException(); }
        }

        public override bool EnablePasswordRetrieval
        {
            get { throw new NotImplementedException(); }
        }

        public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
        {
            throw new NotImplementedException();
        }

        public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
        {
            throw new NotImplementedException();
        }

        public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
        {
            throw new NotImplementedException();
        }

        public override int GetNumberOfUsersOnline()
        {
            throw new NotImplementedException();
        }

        public override string GetPassword(string username, string answer)
        {
            throw new NotImplementedException();
        }

        public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
        {
            throw new NotImplementedException();
        }

        public override string GetUserNameByEmail(string email)
        {
            throw new NotImplementedException();
        }

        public override int MaxInvalidPasswordAttempts
        {
            get { throw new NotImplementedException(); }
        }

        public override int MinRequiredNonAlphanumericCharacters
        {
            get { throw new NotImplementedException(); }
        }

        public override int MinRequiredPasswordLength
        {
            get { throw new NotImplementedException(); }
        }

        public override int PasswordAttemptWindow
        {
            get { throw new NotImplementedException(); }
        }

        public override MembershipPasswordFormat PasswordFormat
        {
            get { throw new NotImplementedException(); }
        }

        public override string PasswordStrengthRegularExpression
        {
            get { throw new NotImplementedException(); }
        }

        public override bool RequiresQuestionAndAnswer
        {
            get { throw new NotImplementedException(); }
        }

        public override bool RequiresUniqueEmail
        {
            get { throw new NotImplementedException(); }
        }

        public override string ResetPassword(string username, string answer)
        {
            throw new NotImplementedException();
        }

        public override bool UnlockUser(string userName)
        {
            throw new NotImplementedException();
        }
    }
}